Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [C] lettura dinamica di caratteri da file
Forum - C/C++ - [C] lettura dinamica di caratteri da file

Avatar
giova87 (Normal User)
Newbie


Messaggi: 3
Iscritto: 11/02/2011

Segnala al moderatore
Postato alle 12:56
Giovedì, 17/02/2011
ciao a tutti!!!

ho un problema con la lettura di un file..
io devo leggere un file di 250 MB che contiene n caratteri, tutti attaccati senza spazi..

avevo fatto in questo modo:

Codice sorgente - presumibilmente C/C++

  1. char *parola=NULL;
  2.  
  3.    parola = (char*)malloc( 256 * sizeof(char));
  4.    memset(parola,0,256 * sizeof(char));
  5.  
  6.    fscanf(fileTesto,"%s", parola);



solo che il mio numero di caratteri è di gran lunga superiore a 256..

come posso farlo in modo dinamico, cioè senza sapere a priori quanti caratteri andrò a leggere?

spero che qualcuno mi possa aiutare.. grazie!

Ultima modifica effettuata da giova87 il 17/02/2011 alle 12:56
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 13:45
Giovedì, 17/02/2011

ci sono molti modi di fare quello che chiedi, ma la domanda principale che ti dovresti fare è

"ma mi servono veramente tutti i 250Mb di file in memoria allo stesso tempo?"

se la risposta è si, preparati ad avere oltre 250 Mb di ram utilizzati dal tuo programma e un tempo di caricamento non indifferente (diversi secondi con un hdd medio: 250Mb / 70Mb/sec = 3,5 sec)

se invece la risposta è no, dovresti considerare un metodo di accesso al file diverso, in particolare l'accesso casuale risolverebbe perecchie cose: in primis non dovresti mantenere in memoria tutto il file, ma ti bastano pochi chunks e poi il tempo di caricamento sarà praticamente nullo, giusto il tempo di arrivare all'indice all'interno del file che contiene l'informazione che ti serve.


PM Quote
Avatar
giova87 (Normal User)
Newbie


Messaggi: 3
Iscritto: 11/02/2011

Segnala al moderatore
Postato alle 15:27
Giovedì, 17/02/2011
forse mi sono spiegato male!
io devo leggere vari file di testo di cui 1 grande 250 MB e contiene 269484032  "a" consecutive,senza spazi..
un altro è composto da 255 "a" consecutive
uno da 256 "a" consecutive
e uno da circa un migliaio di parole di lunghezza al massimo una ventina di caratteri

la mia idea era quella di utilizzare la fscanf, ma per dichiarare il buffer di lettura devo sapere a priori quanto grande esso dev'essere mentre io devo fare un programma che funzioni con tutti i tipi di file.

l'unica alternativa che conosco è l'utilizzo della fgetc all'interno di un ciclo ma ha tempi di esecuzione molto lunghi per file molto grandi!



PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 15:34
Giovedì, 17/02/2011
Testo quotato

Postato originariamente da giova87:

forse mi sono spiegato male!
io devo leggere vari file di testo di cui 1 grande 250 MB e contiene 269484032  "a" consecutive,senza spazi..
un altro è composto da 255 "a" consecutive
uno da 256 "a" consecutive
e uno da circa un migliaio di parole di lunghezza al massimo una ventina di caratteri

la mia idea era quella di utilizzare la fscanf, ma per dichiarare il buffer di lettura devo sapere a priori quanto grande esso dev'essere mentre io devo fare un programma che funzioni con tutti i tipi di file.

l'unica alternativa che conosco è l'utilizzo della fgetc all'interno di un ciclo ma ha tempi di esecuzione molto lunghi per file molto grandi!




ma fatti delle domande... a cosa diavolo serve leggere (o anche solo avere) un file di 250Mb che contiene solo "a"???

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 15:44
Giovedì, 17/02/2011
in effetti... parti da capo e spiega dettagliatamente il problema che intendi risolvere. Qui c'è qualcosa di estremamente inefficiente che può sicuramente essere migliorato di un fattore 1:1000 :-)

PM Quote